1 Assignment

Short objective

The objective of this report is to analyze the incidence rates of Guillain-Barré Syndrom (gbs) and anaphylactic shock using the PHARMO database, and to present the results in a clear and concise manner.

Methods

PHARMO

The data for this analysis was obtained from the PHARMO database, which is a research institute in the Netherlands that maintains a database of electronic medical records. The Pharmo Data Network is a population-based network of healthcare databases and combines data from different healthcare settings in the Netherlands. These different data sources are linked on a patient level through validated algorithms.

Study population

For this research particularly, individuals who were in the study between 01/01/2017 and 31/12/2020 are included. In addition, the study’s inclusion and exclusion criteria consist of three requirements. The first requirement is that individuals must have at least one year of follow-up before the study’s start date. The second requirement is that individuals must have at least one day of follow-up after the study’s start date. Lastly, the study will not consider repeated events, and individuals will be censored at the first occurrence of an event. After fulfilling the aforementioned requirements, we have a study population of N = 675

Data Preperation

Prior to the analysis, various tables are prepared and then combined in order to obtain the incidence rates. First the OBSERVATION_PERIOD table was loaded and individuals who are not in the above mentioned study population, will be removed.

After doing this, the PERSONS table was loaded. In this table, an age variable is made with the birth data variable. The age was created with the start of the study period as reference. with this age variable, the following age bands are created: 0-19, 20-39, 40-59, 60-79. The age band 80+ is not created, because the there are no individuals who are older than 67.

The next step in the date preparation, was merging the OBSERVATION_PERIODS and PERSON table. We only kept the individuals who are in the OBSERVATION_PERIODS table.

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events used to make incidence rates can be found in Table 1.1

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events we will make incidence rates of can be found in Table 1.1.

Figure 1.1: A table

Lastly, the EVENTS table is loaded, and merged with the event codes. If the persons had an event before the start of the study, they are removed from the dataset. If a person has more than one event, the second event is removed.

Analyis

For the analysis, incidence rates per 1000 person years for the study population are created per event (i.e. Anaphylactic Shock Narrow, Anaphylactic shock broad, and gbs). The formula for the incidence rates can be found below:

\[ \text{Incidence Rates overall} = \frac{Total \ number \ of \ events}{Total \ person-years} * 1000 \]

Afterwards, the incidence rates are stratified by year and age-bands. The formulas for these can be found below: \[ \text{Incidence rates by year} = \frac{total \ number \ of \ events \ for \ each \ year} { person-years \ for \ each \ year} * 1000 \]

\[ \text{Incidence rates by year by age bands} = \frac{Total \ number \ of \ events for \ each \ year \ per \ age \ band}{person-years \ for \ each \ year \ per \ age \ band} * 1000 \]

To assess the technical validation, confidence intervals are used. Exact Poisson confidence limits for the estimated rate are found as the Poisson means, for distributions with the observed number of events and probabilities relevant to the chosen confidence level, divided by time at risk. The relationship between the Poisson and chi-square distributions is employed here (Ulm, 1990):

\[Y_l = \frac{\chi^2_{2Y , a/2}}{2}\] \[Y_u=\frac{\chi^2_2(Y+1), 1-a/2}{2}\]

where Y is the observed number of events, \(Y_l\) and \(Y_u\) are lower and upper confidence limits for Y respectively, \(\chi^2_{v,a}\) is the chi-square quantile for upper tail probability on ν degrees of freedom.

Results

Forest Plots

Total

2017

2018

2019

2020

Lessons learned

Annexes

Annex 1 Results Table

Annex 2 Day 6

LS0tDQp0aXRsZTogIkluY2lkZW5jZSINCmF1dGhvcjogIk1hcnRpam4gS29zdGVyLCBKdXJyaWFuIHZhbiBkZSBLcmFhdHMsIFRpbSBQb29ydGh1aXMiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6DQogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoNCiAgICB0b2M6IHRydWUNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgdGhlbWU6IHBhcGVyDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGNvbW1lbnQgPSBOQSwgd2FybmluZyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGVycm9yPUZBTFNFLCByZXN1bHRzPSdoaWRlJyxmaWcua2VlcD0nYWxsJykNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCg0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoZGF0YS50YWJsZSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGVwaVIpDQpgYGANCg0KIyBBc3NpZ25tZW50DQoNCg0KYGBge3J9DQoNCiMgbG9hZCB0aGUgdGFibGVzDQpPX1AgPC0gcmVhZC5jc3YoIlRhYmxlcy9PQlNFUlZBVElPTl9QRVJJT0RTLmNzdiIpDQpldmVudHMgPC0gcmVhZC5jc3YoJ1RhYmxlcy9FVkVOVFMuY3N2JykNCnBlcnNvbnMgPC0gcmVhZC5jc3YoJ1RhYmxlcy9QRVJTT05TLmNzdicpDQppbnN0YW5jZSA8LSByZWFkLmNzdignVGFibGVzL0lOU1RBTkNFLmNzdicpDQpjb2RlbGlzdCA8LSByZWFkX2V4Y2VsKCJUYWJsZXMvQ29kZUxpc3RfMjAyMTAxMjgoMSkueGxzeCIsIA0KICAgIHNoZWV0ID0gIkFOQVBIWUwiKQ0KY29kZWxpc3QyIDwtIHJlYWRfZXhjZWwoIlRhYmxlcy9Db2RlTGlzdF8yMDIxMDEyOCgxKS54bHN4IiwgDQogICAgc2hlZXQgPSAiR0JTIikNCmBgYA0KDQoNCiMjIFNob3J0IG9iamVjdGl2ZSB7LSNzaG9ydH0NCg0KVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHJlcG9ydCBpcyB0byBhbmFseXplIHRoZSBpbmNpZGVuY2UgcmF0ZXMgb2YgR3VpbGxhaW4tQmFycsOpIFN5bmRyb20gKGdicykgYW5kIGFuYXBoeWxhY3RpYyBzaG9jayB1c2luZyB0aGUgUEhBUk1PIGRhdGFiYXNlLCBhbmQgdG8gcHJlc2VudCB0aGUgcmVzdWx0cyBpbiBhIGNsZWFyIGFuZCBjb25jaXNlIG1hbm5lci4NCg0KIyMgTWV0aG9kcyB7LSNtZXRofQ0KDQojIyMgUEhBUk1PIHstI3BoYXJ9DQoNClRoZSBkYXRhIGZvciB0aGlzIGFuYWx5c2lzIHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBQSEFSTU8gZGF0YWJhc2UsIHdoaWNoIGlzIGEgcmVzZWFyY2ggaW5zdGl0dXRlIGluIHRoZSBOZXRoZXJsYW5kcyB0aGF0IG1haW50YWlucyBhIGRhdGFiYXNlIG9mIGVsZWN0cm9uaWMgbWVkaWNhbCByZWNvcmRzLiBUaGUgUGhhcm1vIERhdGEgTmV0d29yayBpcyBhIHBvcHVsYXRpb24tYmFzZWQgbmV0d29yayBvZiBoZWFsdGhjYXJlIGRhdGFiYXNlcyBhbmQgY29tYmluZXMgZGF0YSBmcm9tIGRpZmZlcmVudCBoZWFsdGhjYXJlIHNldHRpbmdzIGluIHRoZSBOZXRoZXJsYW5kcy4gVGhlc2UgZGlmZmVyZW50IGRhdGEgc291cmNlcyBhcmUgbGlua2VkIG9uIGEgcGF0aWVudCBsZXZlbCB0aHJvdWdoIHZhbGlkYXRlZCBhbGdvcml0aG1zLg0KDQoNCg0KYGBge3J9DQoNCg0KZGZwMSA8LSBPX1AgJT4lIA0KICBmaWx0ZXIob3Bfc3RhcnRfZGF0ZSA8PSAyMDE2MDEwMSwgIyBSZW1vdmUgaW5kaXZpZHVhbHMgdGhhdCBkbyBub3QgaGF2ZSBhdCBsZWFzdCAxIHllYXIgb2YgRlUgYmVmb3JlIHN0YXJ0IG9mIHN0dWR5DQogICAgICAgICBvcF9lbmRfZGF0ZSA+PSAyMDE3MDEwMikgIyBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kaXZpZHVhbHMgYXQgbGVhc3QgaGF2ZSAxIGRheSBvZiBmdSBkdXJpbmcgc3R1ZHkgcGVyaW9kIA0KZGZwMSRzdGFydF9zdHVkeSA8LSAyMDE3MDEwMQ0KYGBgDQoNCmBgYHtyfQ0KIyBNYWtlIHN1cmUgdGhhdCBhbGwgZGF0ZXMgYXJlIGluIERhdGUgZm9ybWF0IFlZWVktTU0tREQNCmRmcDEgPC0gZGZwMSAlPiUgDQogIG11dGF0ZShvcF9zdGFydF9kYXRlID0gYXMuRGF0ZSh5bWQob3Bfc3RhcnRfZGF0ZSkpLA0KICAgICAgICAgb3BfZW5kX2RhdGUgPSBhcy5EYXRlKHltZChvcF9lbmRfZGF0ZSkpLA0KICAgICAgICAgc3RhcnRfc3R1ZHkgPSBhcy5EYXRlKHltZChzdGFydF9zdHVkeSkpKQ0KYGBgDQoNCmBgYHtyfQ0KcGVyc29ucyA8LSBwZXJzb25zICU+JSANCiAgbXV0YXRlKGJpcnRoZGF0ZSA9IGFzLkRhdGUoeW1kKHllYXJfb2ZfYmlydGgqMTAwMDArbW9udGhfb2ZfYmlydGgqMTAwK2RheV9vZl9iaXJ0aCkpLCAjIGNhbGN1bGF0ZSB0aGUgYmlydGggZGF0ZQ0KICAgICAgICAgYWdlID0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoYXMuRGF0ZSh5bWQoMjAxNzAxMDEpKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlydGhkYXRlLCB1bml0cz0nZGF5cycpKSAvIDM2NS4yNSwgIyBjYWxjdWxhdGUgdGhlIGFnZSANCiAgICAgICAgIGFnZV9iYW5kcyA9IGN1dChhZ2UsIGJyZWFrcyA9IGMoMCwxOSwzOSw1OSw3OSxJbmYpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLmxvd2VzdCA9IFQsaW5jbHVkZS5oaWdoZXN0ID0gVCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiWzAsMTldIiwnWzIwLDM5XScsICdbNDAsNTldJywgJ1s2MCw3OV0nLCAnWzgwK10nKSkgIyBNYWtlIHN1cmUgdGhlIGFnZXMgYXJlIGRpdmlkZWQgaW4gYWdlIGJhbmRzIA0KICAgICAgICAgICAgICAgICAgICAgICAgICkgJT4lIA0KICBmaWx0ZXIoYWdlID49IDApDQpgYGANCg0KDQoNCiMjIyBTdHVkeSBwb3B1bGF0aW9uIHstI3N0dXBvcH0NCg0KRm9yIHRoaXMgcmVzZWFyY2ggcGFydGljdWxhcmx5LCBpbmRpdmlkdWFscyB3aG8gd2VyZSBpbiB0aGUgc3R1ZHkgYmV0d2VlbiAwMS8wMS8yMDE3IGFuZCAzMS8xMi8yMDIwIGFyZSBpbmNsdWRlZC4gSW4gYWRkaXRpb24sIHRoZSBzdHVkeSdzIGluY2x1c2lvbiBhbmQgZXhjbHVzaW9uIGNyaXRlcmlhIGNvbnNpc3Qgb2YgdGhyZWUgcmVxdWlyZW1lbnRzLiBUaGUgZmlyc3QgcmVxdWlyZW1lbnQgaXMgdGhhdCBpbmRpdmlkdWFscyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHllYXIgb2YgZm9sbG93LXVwIGJlZm9yZSB0aGUgc3R1ZHkncyBzdGFydCBkYXRlLiBUaGUgc2Vjb25kIHJlcXVpcmVtZW50IGlzIHRoYXQgaW5kaXZpZHVhbHMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBkYXkgb2YgZm9sbG93LXVwIGFmdGVyIHRoZSBzdHVkeSdzIHN0YXJ0IGRhdGUuIExhc3RseSwgdGhlIHN0dWR5IHdpbGwgbm90IGNvbnNpZGVyIHJlcGVhdGVkIGV2ZW50cywgYW5kIGluZGl2aWR1YWxzIHdpbGwgYmUgY2Vuc29yZWQgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gZXZlbnQuIEFmdGVyIGZ1bGZpbGxpbmcgdGhlIGFmb3JlbWVudGlvbmVkIHJlcXVpcmVtZW50cywgd2UgaGF2ZSBhIHN0dWR5IHBvcHVsYXRpb24gb2YgX05fID0gYHIgbnJvdyhkZnAxKWANCg0KIyMjIERhdGEgUHJlcGVyYXRpb24gey0jZGF0cHJlcH0NCg0KUHJpb3IgdG8gdGhlIGFuYWx5c2lzLCB2YXJpb3VzIHRhYmxlcyBhcmUgcHJlcGFyZWQgYW5kIHRoZW4gY29tYmluZWQgaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBpbmNpZGVuY2UgcmF0ZXMuIEZpcnN0IHRoZSBPQlNFUlZBVElPTl9QRVJJT0QgdGFibGUgd2FzIGxvYWRlZCBhbmQgaW5kaXZpZHVhbHMgd2hvIGFyZSBub3QgaW4gdGhlIGFib3ZlIG1lbnRpb25lZCBzdHVkeSBwb3B1bGF0aW9uLCB3aWxsIGJlIHJlbW92ZWQuIA0KDQpBZnRlciBkb2luZyB0aGlzLCB0aGUgUEVSU09OUyB0YWJsZSB3YXMgbG9hZGVkLiBJbiB0aGlzIHRhYmxlLCBhbiBhZ2UgdmFyaWFibGUgaXMgbWFkZSB3aXRoIHRoZSBiaXJ0aCBkYXRhIHZhcmlhYmxlLiBUaGUgYWdlIHdhcyBjcmVhdGVkIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBzdHVkeSBwZXJpb2QgYXMgcmVmZXJlbmNlLiB3aXRoIHRoaXMgYWdlIHZhcmlhYmxlLCB0aGUgZm9sbG93aW5nIGFnZSBiYW5kcyBhcmUgY3JlYXRlZDogMC0xOSwgMjAtMzksIDQwLTU5LCA2MC03OS4gVGhlIGFnZSBiYW5kIDgwKyBpcyBub3QgY3JlYXRlZCwgYmVjYXVzZSB0aGUgdGhlcmUgYXJlIG5vIGluZGl2aWR1YWxzIHdobyBhcmUgb2xkZXIgdGhhbiBgciByb3VuZChtYXgocGVyc29ucyRhZ2UpKWAuICANCg0KVGhlIG5leHQgc3RlcCBpbiB0aGUgZGF0ZSBwcmVwYXJhdGlvbiwgd2FzIG1lcmdpbmcgdGhlIE9CU0VSVkFUSU9OX1BFUklPRFMgYW5kIFBFUlNPTiB0YWJsZS4gV2Ugb25seSBrZXB0IHRoZSBpbmRpdmlkdWFscyB3aG8gYXJlIGluIHRoZSBPQlNFUlZBVElPTl9QRVJJT0RTIHRhYmxlLiANCg0KDQpXaGVuIHRoZSBhZm9yZW1lbnRpb25lZCB0YWJsZXMgYXJlIG1lcmdlZCwgQ29uY2VwdCBzZXRzIHdlcmUgY3JlYXRlZC4gVGhlc2Ugc2V0cyB3ZXJlIGNyZWF0ZWQgZnJvbSBkaWFnbm9zdGljIGNvZGVzIGZyb20gdGhlIGNvZGVzaGVldC4gQWxsIGRpYWdub3N0aWMgY29kZXMgYW5kIHZvY2FidWxhcnkgb2YgdGhlIGV2ZW50cyB1c2VkIHRvIG1ha2UgaW5jaWRlbmNlIHJhdGVzIGNhbiBiZSBmb3VuZCBpbiBUYWJsZSBcQHJlZihmaWc6Y29kZXMpDQoNCldoZW4gdGhlIGFmb3JlbWVudGlvbmVkIHRhYmxlcyBhcmUgbWVyZ2VkLCBDb25jZXB0IHNldHMgd2VyZSBjcmVhdGVkLiBUaGVzZSBzZXRzIHdlcmUgY3JlYXRlZCBmcm9tIGRpYWdub3N0aWMgY29kZXMgZnJvbSB0aGUgY29kZXNoZWV0LiBBbGwgZGlhZ25vc3RpYyBjb2RlcyBhbmQgdm9jYWJ1bGFyeSBvZiB0aGUgZXZlbnRzIHdlIHdpbGwgbWFrZSBpbmNpZGVuY2UgcmF0ZXMgb2YgY2FuIGJlIGZvdW5kIGluIFRhYmxlIFxAcmVmKGZpZzpjb2RlcykuDQoNCg0KDQoNCmBgYHtyIGNvZGVzLCByZXN1bHRzPSdhc2lzJywgZmlnLmNhcCA9ICdBIHRhYmxlJ30NCmFuYXBoeWwgPC0gY29kZWxpc3QgJT4lIA0KICBmaWx0ZXIoYENvZGluZyBzeXN0ZW1gPT0gYygnSUNEOScsICdJQ0QxMC9DTScpKQ0KDQpnYnMgPC0gY29kZWxpc3QyICU+JSANCiAgZmlsdGVyKGBDb2Rpbmcgc3lzdGVtYD09IGMoJ0lDRDknLCAnSUNEMTAvQ00nKSkNCg0KY29kZXMgPC0gZGF0YS50YWJsZShEaWFnbm9zaXMgPSBwYXN0ZTAoJ2FuYXBoeWxfJyxhbmFwaHlsJEFsZ29yaXRobSxzZXAgPSAiIiksIA0KICAgICAgICAgICAgICAgIGV2ZW50X2NvZGUgPSBhbmFwaHlsJENvZGUsIA0KICAgICAgICAgICAgICAgIFZvY2FidWxhcnkgPSBhbmFwaHlsJGBDb2Rpbmcgc3lzdGVtYCkNCg0KZ2JzdGVtcCA8LSBkYXRhLnRhYmxlKERpYWdub3NpcyA9IHBhc3RlMCgnZ2JzXycsZ2JzJEFsZ29yaXRobSxzZXAgPSAiIiksIA0KICAgICAgICAgICAgICAgIGV2ZW50X2NvZGUgPSBnYnMkQ29kZSwgDQogICAgICAgICAgICAgICAgVm9jYWJ1bGFyeSA9IGdicyRgQ29kaW5nIHN5c3RlbWApDQoNCmNvZGVzIDwtIHJiaW5kKGNvZGVzLCBnYnN0ZW1wKQ0KDQpkYXRhdGFibGUoY29kZXMsIA0KICAgICAgICAgIGNhcHRpb249J0RpYWdub3N0aWMgY29kZXMgcmV0cmlldmVkIGZyb20gdGhlIENvZGVMaXN0XzIwMjEwMTI4IEFOQVBIWUwgYW5kIEdCUyBzaGVldHMgJywNCiAgICAgICAgICBjbGFzcz0nY29tcGFjdCcsIA0KICAgICAgICAgIHJvd25hbWVzPUYsIA0KICAgICAgICAgIGNvbG5hbWVzPWMoJ0RpYWdub3NpcycsICdFdmVudCBDb2RlJywgJ1ZvY2FidWxhcnknKSwNCiAgICAgICAgICBleHRlbnNpb25zPSdCdXR0b25zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJw0KICAgICAgICAgICAgICAgICAgICAgICAgICwgYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJywgJ3BkZicsICdwcmludCcpDQogICAgICAgICAgKSkjIyBEZXplIG9wIGxhdGVyIG1vbWVudCBub2cgd2F0IG1vb2llciBtYWtlbiANCg0KYGBgDQoNCg0KDQpMYXN0bHksIHRoZSBFVkVOVFMgdGFibGUgaXMgbG9hZGVkLCBhbmQgbWVyZ2VkIHdpdGggdGhlIGV2ZW50IGNvZGVzLiBJZiB0aGUgcGVyc29ucyBoYWQgYW4gZXZlbnQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc3R1ZHksIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGF0YXNldC4gSWYgYSBwZXJzb24gaGFzIG1vcmUgdGhhbiBvbmUgZXZlbnQsIHRoZSBzZWNvbmQgZXZlbnQgaXMgcmVtb3ZlZC4gDQoNCiMjIyBBbmFseWlzIHstI2FuYWx9DQoNCg0KRm9yIHRoZSBhbmFseXNpcywgaW5jaWRlbmNlIHJhdGVzIHBlciAxMDAwIHBlcnNvbiB5ZWFycyBmb3IgdGhlIHN0dWR5IHBvcHVsYXRpb24gYXJlIGNyZWF0ZWQgcGVyIGV2ZW50IChpLmUuIEFuYXBoeWxhY3RpYyBTaG9jayBOYXJyb3csIEFuYXBoeWxhY3RpYyBzaG9jayBicm9hZCwgYW5kIGdicykuIFRoZSBmb3JtdWxhIGZvciB0aGUgaW5jaWRlbmNlIHJhdGVzIGNhbiBiZSBmb3VuZCBiZWxvdzoNCg0KDQpcWw0KXHRleHR7SW5jaWRlbmNlIFJhdGVzIG92ZXJhbGx9ID0gXGZyYWN7VG90YWwgXCBudW1iZXIgXCBvZiBcIGV2ZW50c317VG90YWwgXCBwZXJzb24teWVhcnN9ICogMTAwMCANClxdDQoNCkFmdGVyd2FyZHMsIHRoZSBpbmNpZGVuY2UgcmF0ZXMgYXJlIHN0cmF0aWZpZWQgYnkgeWVhciBhbmQgYWdlLWJhbmRzLiBUaGUgZm9ybXVsYXMgZm9yIHRoZXNlIGNhbiBiZSBmb3VuZCBiZWxvdzogDQpcWw0KICBcdGV4dHtJbmNpZGVuY2UgcmF0ZXMgYnkgeWVhcn0gPSBcZnJhY3t0b3RhbCBcICBudW1iZXIgXCBvZiBcIGV2ZW50cyBcIGZvciBcIGVhY2ggXCB5ZWFyfSB7IHBlcnNvbi15ZWFycyBcIGZvciBcIGVhY2ggXCB5ZWFyfSAqIDEwMDANClxdDQoNClxbDQogIFx0ZXh0e0luY2lkZW5jZSByYXRlcyBieSB5ZWFyIGJ5IGFnZSBiYW5kc30gPSBcZnJhY3tUb3RhbCBcIG51bWJlciBcIG9mIFwgZXZlbnRzIGZvciBcIGVhY2ggXCB5ZWFyIFwgIHBlciBcICBhZ2UgXCBiYW5kfXtwZXJzb24teWVhcnMgXCBmb3IgXCBlYWNoIFwgeWVhciBcICBwZXIgXCBhZ2UgXCBiYW5kfSAqIDEwMDANClxdDQoNClRvIGFzc2VzcyB0aGUgdGVjaG5pY2FsIHZhbGlkYXRpb24sIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFyZSB1c2VkLiBFeGFjdCBQb2lzc29uIGNvbmZpZGVuY2UgbGltaXRzIGZvciB0aGUgZXN0aW1hdGVkIHJhdGUgYXJlIGZvdW5kIGFzIHRoZSBQb2lzc29uIG1lYW5zLCBmb3IgZGlzdHJpYnV0aW9ucyB3aXRoIHRoZSBvYnNlcnZlZCBudW1iZXIgb2YgZXZlbnRzIGFuZCBwcm9iYWJpbGl0aWVzIHJlbGV2YW50IHRvIHRoZSBjaG9zZW4gY29uZmlkZW5jZSBsZXZlbCwgZGl2aWRlZCBieSB0aW1lIGF0IHJpc2suIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgUG9pc3NvbiBhbmQgY2hpLXNxdWFyZSBkaXN0cmlidXRpb25zIGlzIGVtcGxveWVkIGhlcmUgKFVsbSwgMTk5MCk6DQoNCiQkWV9sID0gXGZyYWN7XGNoaV4yX3syWSAsIGEvMn19ezJ9JCQNCiQkWV91PVxmcmFje1xjaGleMl8yKFkrMSksIDEtYS8yfXsyfSQkDQoNCndoZXJlIFkgaXMgdGhlIG9ic2VydmVkIG51bWJlciBvZiBldmVudHMsICRZX2wkIGFuZCAkWV91JCBhcmUgbG93ZXIgYW5kIHVwcGVyIGNvbmZpZGVuY2UgbGltaXRzIGZvciBZIHJlc3BlY3RpdmVseSwgJFxjaGleMl97dixhfSQgaXMgdGhlIGNoaS1zcXVhcmUgcXVhbnRpbGUgZm9yIHVwcGVyIHRhaWwgcHJvYmFiaWxpdHkgb24gzr0gZGVncmVlcyBvZiBmcmVlZG9tLg0KDQoNCg0KDQoNCiMjIFJlc3VsdHMgey0jcmVzfQ0KYGBge3J9DQpkYXRhIDwtIGxlZnRfam9pbihkZnAxLCBwZXJzb25zLCBieSA9ICJwZXJzb25faWQiKSAjIG1lcmdlIHRoZSBPQlNFUlZBVElPTl9QRVJJT0RTIGFuZCBQRVJTT05TIHRhYmxlIChrZWVwIG9ubHkgaW5kaXZpZHVhbHMgd2hvIGFyZSBpbiBPQlNFUlZBVElPTlNfUEVSSU9EUyB0YWJsZSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmRmcDIgPC0gbWVyZ2UoY29kZXMsIGV2ZW50cywgYnkgPSAnZXZlbnRfY29kZScpDQpkZnAyIDwtIGRmcDIgJT4lIA0KICBmaWx0ZXIoc3RhcnRfZGF0ZV9yZWNvcmQgPiAyMDE3MDEwMSwNCiAgICAgICAgIHN0YXJ0X2RhdGVfcmVjb3JkIDwgMjAyMTAxMDEpICU+JSANCiAgYXJyYW5nZShzdGFydF9kYXRlX3JlY29yZCkNCg0KZGZwMiA8LSBkZnAyWyFkdXBsaWNhdGVkKGRmcDIkcGVyc29uX2lkKV0NCmRmcDIkZW5kX2RhdGVfcmVjb3JkIDwtIGRmcDIkc3RhcnRfZGF0ZV9yZWNvcmQNCmRmcDIkaXNfZXZlbnQgPC0gMQ0KDQpgYGANCg0KYGBge3J9DQpkZnRvdGFsIDwtIGxlZnRfam9pbihkYXRhLGRmcDIsIGJ5ID0gJ3BlcnNvbl9pZCcpDQpkZnRvdGFsJGlzX2V2ZW50W2lzLm5hKGRmdG90YWwkaXNfZXZlbnQpXSA8LSAwDQpgYGANCg0KYGBge3J9DQojIGVpbmRlIHZhbiBkZSBzdHVkaWUgcGVyaW9kZSBvcCBoZXQgbW9tZW50IGRhdCBlciBlZW4gZXZlbnQgaXMgYmlqIGVlbiBvYnNlcnZhdGllDQpkZnRvdGFsJGVuZF9pbmNpZGVuY2UgPC0gYXMuRGF0ZSh5bWQoZGZ0b3RhbCRlbmRfZGF0ZV9yZWNvcmQpKQ0KIyBXaGVuIG9ic2VydmF0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXZlbnQsIG1ha2Ugc3VyZSBlbmRfaW5jaWRlbmNlIGlzIGNvZGVkIGFzIGVuZCBzdHVkeSBwZXJpb2QgKDIwMjEtMDEtMDEpDQpkZnRvdGFsJGVuZF9pbmNpZGVuY2VbaXMubmEoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlKV0gPC0gYXMuRGF0ZSh5bWQoMjAyMTAxMDEpKSANCiNDYWxjdWxhdGUgaG93IG1hbnkgeWVhcnMgZWFjaCBvYnNlcnZhaXRvbiB3YXMgaW4gdGhlIHN0dWR5LiANCmRmdG90YWwkeWVhcnNfaW5fc3R1ZHkgPC0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnRvdGFsJHN0YXJ0X3N0dWR5LCB1bml0cz0nZGF5cycpKSAvIDM2NS4yNQ0KDQpgYGANCg0KDQpgYGB7cn0NCiNtYWtpbmcgSVIgd2l0aCA5NSUgQ0kgDQpJUl85NV9DSSA8LSBmdW5jdGlvbihldmVudHMsIHB5LCBOKXsNCiAgdG1wIDwtIGFzLm1hdHJpeChjYmluZChldmVudHMsIHB5KSkNCiAgY29uZl9pbnRzIDwtIHJvdW5kKGVwaS5jb25mKHRtcCwgY3R5cGUgPSAiaW5jLnJhdGUiLCBtZXRob2QgPSAiZXhhY3QiLCBOID0gTiwgZGVzaWduID0gMSwgDQogICBjb25mLmxldmVsID0gMC45NSkgKiAxMDAwLCAyKQ0KICByZXR1cm4oY29uZl9pbnRzKQ0KfQ0KYGBgDQoNCjwhLS0gVWxtIEsgKDE5OTApLiBBIHNpbXBsZSBtZXRob2QgdG8gY2FsY3VsYXRlIHRoZSBjb25maWRlbmNlIGludGVydmFsIG9mIGEgc3RhbmRhcmRpemVkIG1vcnRhbGl0eSByYXRpby4gQW1lcmljYW4gSm91cm5hbCBvZiBFcGlkZW1pb2xvZ3kgMTMxOiAzNzMgLSAzNzUgLS0+DQoNCg0KDQpgYGB7cn0NCiN0b3RhbCBQWSBpbiBzdHVkeSBwZXJpb2QNClRQWSA8LSBzdW0oZGZ0b3RhbCR5ZWFyc19pbl9zdHVkeSkNCg0KI2NhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGFuYXBoIHNob2NrcyBQb3NzaWJsZSBpbiBzdHVkeSBwZXJpb2QgDQpUTkVfYW5hcGhQIDwtIGRmdG90YWwgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX3Bvc3NpYmxlJykgJT4lIG5yb3coKQ0KDQojIEluY2lkZW5jZSBSYXRlIGZvciBhbmFwaCBzaG9jayBwb3NzaWJsZSBpbiBzdHVkeSBwZXJpb2QgDQoNCg0KaXJvX2FuYXBoUCA8LSAgSVJfOTVfQ0koVE5FX2FuYXBoUCwgVFBZLCBucm93KGRhdGEpKQ0KDQoNCiNjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBhbmFwaCBzaG9ja3MgbmFycm93IGluIHN0dWR5IHBlcmlvZCANClRORV9hbmFwaE4gPC0gZGZ0b3RhbCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGZvciBhbmFwaCBzaG9jayBuYXJyb3cgaW4gc3R1ZHkgcGVyaW9kDQppcm9fYW5hcGhOIDwtIElSXzk1X0NJKFRORV9hbmFwaE4sIFRQWSwgbnJvdyhkYXRhKSkNCg0KIyBhbW91bnQgb2YgZ2JzIGNhc2VzIGluIHN0dWR5IHBlcmlvZA0KVE5FX2dicyA8LSBkZnRvdGFsICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnZ2JzX25hcnJvdycpICU+JSBucm93KCkNCg0KIyBJUiBmb3IgZ2JzIGluIHN0dWR5IHBlcmlvZA0KaXJvX2dicyA8LSBJUl85NV9DSShUTkVfZ2JzLCBUUFksIG5yb3coZGF0YSkpDQpgYGANCg0KDQoNCg0KYGBge3J9DQojIEFkZCBmb3IgZXZlcnkgb2JzZXJ2YXRpb25zIHdpdGggYW4gZXZlbnQgdGhlIGRhdGUgb2YgdGhlIGV2ZW50IGluIHRoZSBkYXRhc2V0LiANCmRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3IDwtIGFzLkRhdGUoeW1kKGRmdG90YWwkZW5kX2RhdGVfcmVjb3JkKSkgDQojIGZvciBldmVyeSBvYnNlcnZ0aW9uIHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlc2Ugd2lsbCBnZXQgdGhlIHN0YXJ0IG9mIDIwMTggYXMgZW5kIGRhdGUsIHNpbmNlIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBJUiBmb3IgMjAxNw0KZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTdbaXMubmEoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcpXSA8LSBhcy5EYXRlKHltZCgyMDE4MDEwMSkpDQoNCiMgSWYgb2JzZXJ2YXRpb24gaGFzIGFuIGV2ZW50IGFmdGVyIDIwMTcsIGl0IHdpbGwgYmVjb21lIHRoZSBlbmQgb2YgdGhlIG9icyBwZXJpb2QgKDIwMTgtMDEtMDEpDQpkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNyA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3KSA+IDIwMTcsIGFzLkRhdGUoIjIwMTgtMDEtMDEiKSwgZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcpLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpDQpgYGANCg0KDQoNCmBgYHtyfQ0KIyBNYWtlIGVuZCBpbmNpZGVuY2UgZm9yIGV2ZXJ5IHllYXINCmRmXzIwMTggPC0gDQogIGRmdG90YWwgJT4lIA0KICBmaWx0ZXIoIXllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykNCg0KZGZfMjAxOSA8LSANCiAgZGZfMjAxOCAlPiUgDQogIGZpbHRlcigheWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KQ0KDQpkZl8yMDIwIDwtIA0KICBkZl8yMDE5ICU+JSANCiAgZmlsdGVyKCF5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpDQoNCmRmXzIwMjEgPC0gDQogIGRmXzIwMjAgJT4lIA0KICBmaWx0ZXIoIXllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgDQoNCg0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KIyBjYWxjdWxhdGUgZm9yIGVhY2ggaW5kaXZpZHVhbCB0aGUgcHkgb2JzZXJ2ZWQgaW4gMjAxNy4gDQpkZnRvdGFsJHllYXJzX2luX3N0dWR5XzIwMTcgPC0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmdG90YWwkc3RhcnRfc3R1ZHksIHVuaXRzPSdkYXlzJykpIC8gMzY1DQpgYGANCg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRlIHRoZSBldmVudHMgaW4gMjAxNw0KZXZlbnRzXzIwMTcgPC0gc3Vic2V0KGRmdG90YWwsIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQoNCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcNClRQWV8yMDE3IDwtIHN1bShkZnRvdGFsJHllYXJzX2luX3N0dWR5XzIwMTcpDQoNCiMgQ291bnQgdGhlIGFtb3VudCBvZiBhbmFwaHlsIHBvc3NpYmxlIHNob2NrcyBpbiAyMDE3IA0KVE5FX2FuYXBoUF8yMDE3IDwtIGV2ZW50c18yMDE3ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkNCg0KIyBjYWxjdWxhdGUgdGhlIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoeWwgcG9zc2libGUgaW4gMjAxNw0KaXJvX2FuYXBoUF8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxNywgVFBZXzIwMTcsIG5yb3coZGZfdG90YWwpKQ0KDQoNCiMgQ291bnQgdGhlIGFtb3VudCBvZiBhbmFwaHlsIHNob2NrcyBuYXJyb3cgaW4gMjAxNyANClRORV9hbmFwaE5fMjAxNyA8LSBldmVudHNfMjAxNyAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIGNhbGN1bGF0ZSB0aGUgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGh5bCBuYXJyb3cgaW4gMjAxNw0KaXJvX2FuYXBoTl8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAxNywgVFBZXzIwMTcsIG5yb3coZGZfdG90YWwpKQ0KDQojIENvdW50IHRoZSBhbW91bnQgb2YgZ2JzIGluIDIwMTcgDQpUTkVfZ2JzXzIwMTcgPC0gZXZlbnRzXzIwMTcgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIGNhbGN1bGF0ZSB0aGUgSVIgaW4gMTAwMCBQWSBmb3IgZ2JzIGluIDIwMTcNCmlyb19nYnNfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMTcsIFRQWV8yMDE3LCBucm93KGRmX3RvdGFsKSkNCmBgYA0KDQoNCg0KYGBge3J9DQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gDQpkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCA8LSBhcy5EYXRlKHltZChkZl8yMDE4JGVuZF9kYXRlX3JlY29yZCkpDQoNCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAxOS4gDQpkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOFtpcy5uYShkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCldIDwtIGFzLkRhdGUoeW1kKDIwMTkwMTAxKSkNCg0KIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAxOQ0KZGZfMjAxOCRlbmRfaW5jaWRlbmNlXzIwMTggPC0gYXMuRGF0ZShpZmVsc2UoeWVhcihkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCkgPiAyMDE4LCBhcy5EYXRlKCIyMDE5LTAxLTAxIiksIGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4KSwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKQ0KZGZfMjAxOCRzdGFydF9pbmNpZGVuY2VfMjAxOCA8LSBhcy5EYXRlKHltZCgyMDE4MDEwMSkpDQoNCiMgQ291bnQgdGhlIHBlcnNvbiB5ZWFycyBvZiB0aGUgb2JzZXJ2YXRpb24gaW4gMjAxOA0KZGZfMjAxOCR5ZWFyc19pbl9zdHVkeV8yMDE4IDwtIGFzLm51bWVyaWMoZGlmZnRpbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl8yMDE4JHN0YXJ0X2luY2lkZW5jZV8yMDE4LCB1bml0cz0nZGF5cycpKSAvIDM2NQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KIyBBbGwgdGhlIGV2ZW50cyBpbiAyMDE4IGluIGEgbmV3IGRhdGFzZXQNCmV2ZW50c18yMDE4IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTgpIA0KDQojIFRvdGFsIHBlcnNvbiB5ZWFycyBvYnNlcnZlZCBpbiAyMDE4DQpUUFlfMjAxOCA8LSBzdW0oZGZfMjAxOCR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOCANClRORV9hbmFwaFBfMjAxOCA8LSBldmVudHNfMjAxOCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfcG9zc2libGUnKSAlPiUgbnJvdygpDQoNCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOA0KaXJvX2FuYXBoUF8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxOCwgVFBZXzIwMTgsIG5yb3coZGZfMjAxOCkpDQoNCg0KIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIG5hcnJvdyBpbiAyMDE4IA0KVE5FX2FuYXBoTl8yMDE4IDwtIGV2ZW50c18yMDE4ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgbmFyb293IGluIDIwMTgNCmlyb19hbmFwaE5fMjAxOCA8LSAgSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE4LCBUUFlfMjAxOCwgbnJvdyhkZl8yMDE4KSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMTggDQpUTkVfZ2JzXzIwMTggPC0gZXZlbnRzXzIwMTggJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojSVIgZm9yIGdicyBpbiAxMDAwIFBZDQppcm9fZ2JzXzIwMTggPC0gIElSXzk1X0NJKFRORV9nYnNfMjAxOCwgVFBZXzIwMTgsIG5yb3coZGZfMjAxOCkpDQpgYGANCg0KDQoNCg0KYGBge3J9DQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gDQpkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSA8LSBhcy5EYXRlKHltZChkZl8yMDE5JGVuZF9kYXRlX3JlY29yZCkpDQoNCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAxOS4gDQpkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOVtpcy5uYShkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSldIDwtIGFzLkRhdGUoeW1kKDIwMjAwMTAxKSkNCg0KIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAxOQ0KZGZfMjAxOSRlbmRfaW5jaWRlbmNlXzIwMTkgPC0gYXMuRGF0ZShpZmVsc2UoeWVhcihkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSkgPiAyMDE5LCBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5KSwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKQ0KZGZfMjAxOSRzdGFydF9pbmNpZGVuY2VfMjAxOSA8LSBhcy5EYXRlKHltZCgyMDE5MDEwMSkpDQoNCiMgQ291bnQgdGhlIHBlcnNvbiB5ZWFycyBvZiB0aGUgb2JzZXJ2YXRpb24gaW4gMjAxOA0KZGZfMjAxOSR5ZWFyc19pbl9zdHVkeV8yMDE5IDwtIGFzLm51bWVyaWMoZGlmZnRpbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl8yMDE5JHN0YXJ0X2luY2lkZW5jZV8yMDE5LCB1bml0cz0nZGF5cycpKSAvIDM2NQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KIyBBbGwgdGhlIGV2ZW50cyBpbiAyMDE5IGluIGEgbmV3IGRhdGFzZXQNCmV2ZW50c18yMDE5IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIA0KDQojIFRvdGFsIHBlcnNvbiB5ZWFycyBvYnNlcnZlZCBpbiAyMDE5DQpUUFlfMjAxOSA8LSBzdW0oZGZfMjAxOSR5ZWFyc19pbl9zdHVkeV8yMDE5KQ0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOSANClRORV9hbmFwaFBfMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfcG9zc2libGUnKSAlPiUgbnJvdygpDQoNCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOQ0KaXJvX2FuYXBoUF8yMDE5IDwtICBJUl85NV9DSShUTkVfYW5hcGhQXzIwMTksIFRQWV8yMDE5LCBucm93KGRmXzIwMTkpKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBhbmFwaHlsYXRpYyBzaG9jayBuYXJyb3cgaW4gMjAxOSANClRORV9hbmFwaE5fMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIG5hcm9vdyBpbiAyMDE5DQppcm9fYW5hcGhOXzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE5LCBUUFlfMjAxOSwgbnJvdyhkZl8yMDE5KSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMTkgDQpUTkVfZ2JzXzIwMTkgPC0gZXZlbnRzXzIwMTkgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojSVIgZm9yIGdicyBpbiAxMDAwIFBZDQppcm9fZ2JzXzIwMTkgPC0gSVJfOTVfQ0koVE5FX2dic18yMDE5LCBUUFlfMjAxOSwgbnJvdyhkZl8yMDE5KSkNCmBgYA0KDQoNCmBgYHtyfQ0KIyBmb3IgZXZlcnkgb2JzZXJ2YXRpb24gd2hvIGhhcyBhbiBldmVudCBwdXQgaW4gdGhlIGRhdGUuIA0KZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjAgPC0gYXMuRGF0ZSh5bWQoZGZfMjAyMCRlbmRfZGF0ZV9yZWNvcmQpKQ0KDQojZm9yIGV2ZXJ5Ym9keSB3aG8gZG9lcyBub3QgaGF2ZSBhbiBldmVudCwgbWFrZSBzdXJlIHRoZSBlbmQgb2YgaW5jaWRlbmNlIGlzIDAxLTAxLTIwMjEuIA0KZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjBbaXMubmEoZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjApXSA8LSBhcy5EYXRlKHltZCgyMDIxMDEwMSkpDQoNCiMgSWYgYW4gb2JzZXJ2YXRpb24gaGFzIHRoZSBldmVudCBhZnRlciAyMDE4LCB0aGUgZW5kIG9mIHRoZSBvYnNlcnZhdGlvbiB3aWxsIGJlIDAxLTAxLTIwMjANCmRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwIDwtIGFzLkRhdGUoaWZlbHNlKHllYXIoZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjApID4gMjAyMCwgYXMuRGF0ZSgiMjAyMS0wMS0wMSIpLCBkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCksIG9yaWdpbiA9ICIxOTcwLTAxLTAxIikNCmRmXzIwMjAkc3RhcnRfaW5jaWRlbmNlXzIwMjAgPC0gYXMuRGF0ZSh5bWQoMjAyMDAxMDEpKQ0KDQojIENvdW50IHRoZSBwZXJzb24geWVhcnMgb2YgdGhlIG9ic2VydmF0aW9uIGluIDIwMTgNCmRmXzIwMjAkeWVhcnNfaW5fc3R1ZHlfMjAyMCA8LSBhcy5udW1lcmljKGRpZmZ0aW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgIChkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfMjAyMCRzdGFydF9pbmNpZGVuY2VfMjAyMCwgdW5pdHM9J2RheXMnKSkgLyAzNjYNCg0KYGBgDQoNCg0KYGBge3J9DQoNCiMgQWxsIHRoZSBldmVudHMgaW4gMjAyMCBpbiBhIG5ldyBkYXRhc2V0DQpldmVudHNfMjAyMCA8LSBzdWJzZXQoZGZ0b3RhbCwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDIwKSANCg0KIyBUb3RhbCBwZXJzb24geWVhcnMgb2JzZXJ2ZWQgaW4gMjAyMA0KVFBZXzIwMjAgPC0gc3VtKGRmXzIwMjAkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIHBvc3NpYmxlIGluIDIwMjAgDQpUTkVfYW5hcGhQXzIwMjAgPC0gZXZlbnRzXzIwMjAgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX3Bvc3NpYmxlJykgJT4lIG5yb3coKQ0KDQojIEluY2lkZW5jZSByYXRlIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIHBvc3NpYmxlIGluIDIwMjANCmlyb19hbmFwaFBfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMjAsIFRQWV8yMDIwLCBucm93KGRmXzIwMjApKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBhbmFwaHlsYXRpYyBzaG9jayBuYXJyb3cgaW4gMjAyMCANClRORV9hbmFwaE5fMjAyMCA8LSBldmVudHNfMjAyMCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIG5hcm9vdyBpbiAyMDIwDQppcm9fYW5hcGhOXzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDIwLCBUUFlfMjAyMCwgbnJvdyhkZl8yMDIwKSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMjAgDQpUTkVfZ2JzXzIwMjAgPC0gZXZlbnRzXzIwMjAgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojSVIgZm9yIGdicyBpbiAxMDAwIFBZDQppcm9fZ2JzXzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic18yMDIwLCBUUFlfMjAyMCwgbnJvdyhkZl8yMDIwKSkNCmBgYA0KDQoNCmBgYHtyfQ0KRGlhZ25vc2lzIDwtIGMoJ2FuYXBoeWxheGlzX25hcnJvdycsICdhbmFwaHlsYXhpc19uYXJyb3cnLCAnYW5hcGh5bGF4aXNfbmFycm93JywgJ2FuYXBoeWxheGlzX25hcnJvdycsJ2FuYXBoeWxheGlzX25hcnJvdycsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdnYnNfbmFycm93JywgJ2dic19uYXJyb3cnLCAnZ2JzX25hcnJvdycsICdnYnNfbmFycm93JywgJ2dic19uYXJyb3cnKQ0KWWVhcnMgPC0gYygnVG90YWwnLCAnMjAxNycsICcyMDE4JywgJzIwMTknLCAnMjAyMCcsDQogICAgICAgICAgICdUb3RhbCcsICcyMDE3JywgJzIwMTgnLCAnMjAxOScsICcyMDIwJywNCiAgICAgICAgICAgJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnKQ0KDQpJUiA8LSBjKGlyb19hbmFwaE4sIGlyb19hbmFwaE5fMjAxNywgaXJvX2FuYXBoTl8yMDE4LCBpcm9fYW5hcGhOXzIwMTksIGlyb19hbmFwaE5fMjAyMCwgaXJvX2FuYXBoUCwNCiAgICAgICAgaXJvX2FuYXBoUF8yMDE3LCBpcm9fYW5hcGhQXzIwMTgsIGlyb19hbmFwaFBfMjAxOSwgaXJvX2FuYXBoUF8yMDIwLCBpcm9fZ2JzLCBpcm9fZ2JzXzIwMTcsIGlyb19nYnNfMjAxOCwgaXJvX2dic18yMDE5LCBpcm9fZ2JzXzIwMjApDQoNCg0KdGFiIDwtIGRhdGEuZnJhbWUoRGlhZ25vc2lzID0gRGlhZ25vc2lzLCBZZWFyID0gWWVhcnMsICdJUiBwZXIgMTAwMCBweScgPSBJUikNCmBgYA0KDQoNCmBgYHtyfQ0KDQptYWtlX3llYXJfYWdlX2JhbmRzIDwtIGZ1bmN0aW9uKGRhdGEsIGFnZV9ncm91cCkgew0KICBuZXdfZGF0YSA8LSBkYXRhICU+JSANCiAgICBmaWx0ZXIoYWdlX2JhbmRzPT1hZ2VfZ3JvdXApIA0KICByZXR1cm4obmV3X2RhdGEpDQogIH0NCg0KDQpkZnRvdGFsMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbMCwxOV0nKQ0KZGZ0b3RhbDIwMzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZnRvdGFsLCAnWzIwLDM5XScpDQpkZnRvdGFsNDA1OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbNDAsNTldJykNCmRmdG90YWw2MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1s2MCw3OV0nKQ0KZGZ0b3RhbDgwIDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1s4MCtdJykNCg0KYGBgDQoNCg0KYGBge3J9DQojIE1ha2UgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFtb3VudCBvZiBldmVudHMNCmFtb3VudF9ldmVudHMgPC0gZnVuY3Rpb24oZGF0YSwgZGlhZ24pIHsNCiAgZXZlbnRzIDwtIGRhdGEgJT4lIA0KICAgIGZpbHRlcihEaWFnbm9zaXMgPT0gZGlhZ24pICU+JSAgbnJvdygpDQogIHJldHVybihldmVudHMpDQp9DQpgYGANCg0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5DQpUUFkwMDE5IDwtIHN1bShkZnRvdGFsMDAxOSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMC0xOQ0KVE5FX2FuYXBoUDAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTjAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnMwMDE5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDAwMTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFAwMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaFAwMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmlyb19hbmFwaE4wMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE4wMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmlyb19nYnMwMDE5IDwtIElSXzk1X0NJKFRORV9nYnMwMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmBgYA0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAyMC0zOQ0KVFBZMjAzOSA8LSBzdW0oZGZ0b3RhbDIwMzkkeWVhcnNfaW5fc3R1ZHkpDQojIGFtb3VudCBvZiBldmVudHMgZm9yIGVhY2ggZXZlbnQgZm9yIGFnZV9iYW5kIDIwLTM5DQpUTkVfYW5hcGhQMjAzOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwyMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOMjAzOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwyMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2diczIwMzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMjAzOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAyMC0zOSANCmlyb19hbmFwaFAyMDM5IDwtIElSXzk1X0NJKFRORV9hbmFwaFAyMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmlyb19hbmFwaE4yMDM5IDwtIElSXzk1X0NJKFRORV9hbmFwaE4yMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmlyb19nYnMyMDM5IDwtIElSXzk1X0NJKFRORV9nYnMyMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmBgYA0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5DQpUUFk0MDU5IDwtIHN1bShkZnRvdGFsNDA1OSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMC0xOQ0KVE5FX2FuYXBoUDQwNTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTjQwNTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNDA1OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnM0MDU5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDQwNTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFA0MDU5IDwtIElSXzk1X0NJKFRORV9hbmFwaFA0MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmlyb19hbmFwaE40MDU5IDwtIElSXzk1X0NJKFRORV9hbmFwaE40MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmlyb19nYnM0MDU5IDwtIElSXzk1X0NJKFRORV9nYnM0MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmBgYA0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5DQpUUFk2MDc5IDwtIHN1bShkZnRvdGFsNjA3OSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMC0xOQ0KVE5FX2FuYXBoUDYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTjYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnM2MDc5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDYwNzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFA2MDc5IDwtIElSXzk1X0NJKFRORV9hbmFwaFA2MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmlyb19hbmFwaE42MDc5IDwtIElSXzk1X0NJKFRORV9hbmFwaE42MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmlyb19nYnM2MDc5IDwtIElSXzk1X0NJKFRORV9nYnM2MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmBgYA0KDQoNCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfMDAxOSA8LSBzdWJzZXQoZGZ0b3RhbDAwMTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kMDAxOQ0KVFBZXzIwMTdfMDAxOSA8LSBzdW0oZGZ0b3RhbDAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAwMDE5IGluIDIwMTcNClRORV9hbmFwaFBfMDAxOV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8wMDE5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18wMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18wMDE5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18wMDE5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpDQppcm9fYW5hcGhOXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpDQppcm9fZ2JzXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfMjAzOSA8LSBzdWJzZXQoZGZ0b3RhbDIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kMjAzOQ0KVFBZXzIwMTdfMjAzOSA8LSBzdW0oZGZ0b3RhbDIwMzkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAyMDM5IGluIDIwMTcNClRORV9hbmFwaFBfMjAzOV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfMjAzOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8yMDM5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18yMDM5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18yMDM5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpDQppcm9fYW5hcGhOXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpDQppcm9fZ2JzXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfNDA1OSA8LSBzdWJzZXQoZGZ0b3RhbDQwNTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kNDA1OQ0KVFBZXzIwMTdfNDA1OSA8LSBzdW0oZGZ0b3RhbDQwNTkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMTcNClRORV9hbmFwaFBfNDA1OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl80MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic180MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpDQppcm9fYW5hcGhOXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpDQppcm9fZ2JzXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfNjA3OSA8LSBzdWJzZXQoZGZ0b3RhbDYwNzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kNjA3OQ0KVFBZXzIwMTdfNjA3OSA8LSBzdW0oZGZ0b3RhbDYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA2MDc5IGluIDIwMTcNClRORV9hbmFwaFBfNjA3OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl82MDc5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN182MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic182MDc5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN182MDc5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpDQppcm9fYW5hcGhOXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpDQppcm9fZ2JzXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KZGZfMjAxOF8wMDE5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOCwgJ1swLDE5XScpDQpkZl8yMDE4XzIwMzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzIwLDM5XScpDQpkZl8yMDE4XzQwNTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzQwLDU5XScpDQpkZl8yMDE4XzYwNzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzYwLDc5XScpDQpgYGANCg0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF8wMDE5IDwtIHN1YnNldChkZl8yMDE4XzAwMTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDAwMTkNClRQWV8yMDE4XzAwMTkgPC0gc3VtKGRmXzIwMThfMDAxOSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDAwMTkgaW4gMjAxOA0KVE5FX2FuYXBoUF8wMDE5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF8wMDE5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzAwMTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzAwMTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzAwMTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzAwMTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMDAxOV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMDAxOV8yMDE4LCBUUFlfMjAxOF8wMDE5LCBucm93KGRmXzIwMThfMDAxOSkpDQppcm9fYW5hcGhOXzAwMTlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAxOCwgVFBZXzIwMThfMDAxOSwgbnJvdyhkZl8yMDE4XzAwMTkpKQ0KaXJvX2dic18wMDE5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic18wMDE5XzIwMTgsIFRQWV8yMDE4XzAwMTksIG5yb3coZGZfMjAxOF8wMDE5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF8yMDM5IDwtIHN1YnNldChkZl8yMDE4XzIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDIwMzkNClRQWV8yMDE4XzIwMzkgPC0gc3VtKGRmXzIwMThfMjAzOSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDIwMzkgaW4gMjAxOA0KVE5FX2FuYXBoUF8yMDM5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF8yMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzIwMzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzIwMzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzIwMzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzIwMzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMjAzOV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAzOV8yMDE4LCBUUFlfMjAxOF8yMDM5LCBucm93KGRmXzIwMThfMjAzOSkpDQppcm9fYW5hcGhOXzIwMzlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMzlfMjAxOCwgVFBZXzIwMThfMjAzOSwgbnJvdyhkZl8yMDE4XzIwMzkpKQ0KaXJvX2dic18yMDM5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic18yMDM5XzIwMTgsIFRQWV8yMDE4XzIwMzksIG5yb3coZGZfMjAxOF8yMDM5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF80MDU5IDwtIHN1YnNldChkZl8yMDE4XzQwNTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDQwNTkNClRQWV8yMDE4XzQwNTkgPC0gc3VtKGRmXzIwMThfNDA1OSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDQwNTkgaW4gMjAxOA0KVE5FX2FuYXBoUF80MDU5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF80MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNDA1OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNDA1OV8yMDE4LCBUUFlfMjAxOF80MDU5LCBucm93KGRmXzIwMThfNDA1OSkpDQppcm9fYW5hcGhOXzQwNTlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzQwNTlfMjAxOCwgVFBZXzIwMThfNDA1OSwgbnJvdyhkZl8yMDE4XzQwNTkpKQ0KaXJvX2dic180MDU5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic180MDU5XzIwMTgsIFRQWV8yMDE4XzQwNTksIG5yb3coZGZfMjAxOF80MDU5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF82MDc5IDwtIHN1YnNldChkZl8yMDE4XzYwNzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDYwNzkNClRQWV8yMDE4XzYwNzkgPC0gc3VtKGRmXzIwMThfNjA3OSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDYwNzkgaW4gMjAxOA0KVE5FX2FuYXBoUF82MDc5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF82MDc5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzYwNzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzYwNzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzYwNzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzYwNzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNjA3OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNjA3OV8yMDE4LCBUUFlfMjAxOF82MDc5LCBucm93KGRmXzIwMThfNjA3OSkpDQppcm9fYW5hcGhOXzYwNzlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAxOCwgVFBZXzIwMThfNjA3OSwgbnJvdyhkZl8yMDE4XzYwNzkpKQ0KaXJvX2dic182MDc5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic182MDc5XzIwMTgsIFRQWV8yMDE4XzYwNzksIG5yb3coZGZfMjAxOF82MDc5KSkNCmBgYA0KDQoNCg0KYGBge3J9DQpkZl8yMDE5XzAwMTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE5LCAnWzAsMTldJykNCmRmXzIwMTlfMjAzOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbMjAsMzldJykNCmRmXzIwMTlfNDA1OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbNDAsNTldJykNCmRmXzIwMTlfNjA3OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbNjAsNzldJykNCmBgYA0KDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE3IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzAwMTkgPC0gc3Vic2V0KGRmXzIwMTlfMDAxOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kMDAxOQ0KVFBZXzIwMTlfMDAxOSA8LSBzdW0oZGZfMjAxOV8wMDE5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMDAxOSBpbiAyMDE5DQpUTkVfYW5hcGhQXzAwMTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzAwMTksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fMDAxOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMDAxOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfMDAxOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMDAxOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF8wMDE5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8wMDE5XzIwMTksIFRQWV8yMDE5XzAwMTksIG5yb3coZGZfMjAxOV8wMDE5KSkNCmlyb19hbmFwaE5fMDAxOV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMDAxOV8yMDE5LCBUUFlfMjAxOV8wMDE5LCBucm93KGRmXzIwMTlfMDAxOSkpDQppcm9fZ2JzXzAwMTlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzAwMTlfMjAxOSwgVFBZXzIwMTlfMDAxOSwgbnJvdyhkZl8yMDE5XzAwMTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzIwMzkgPC0gc3Vic2V0KGRmXzIwMTlfMjAzOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kMjAzOQ0KVFBZXzIwMTlfMjAzOSA8LSBzdW0oZGZfMjAxOV8yMDM5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMjAzOSBpbiAyMDE5DQpUTkVfYW5hcGhQXzIwMzlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fMjAzOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMjAzOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfMjAzOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMjAzOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF8yMDM5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDM5XzIwMTksIFRQWV8yMDE5XzIwMzksIG5yb3coZGZfMjAxOV8yMDM5KSkNCmlyb19hbmFwaE5fMjAzOV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAzOV8yMDE5LCBUUFlfMjAxOV8yMDM5LCBucm93KGRmXzIwMTlfMjAzOSkpDQppcm9fZ2JzXzIwMzlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxOSwgVFBZXzIwMTlfMjAzOSwgbnJvdyhkZl8yMDE5XzIwMzkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzQwNTkgPC0gc3Vic2V0KGRmXzIwMTlfNDA1OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kNDA1OQ0KVFBZXzIwMTlfNDA1OSA8LSBzdW0oZGZfMjAxOV80MDU5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNDA1OSBpbiAyMDE5DQpUTkVfYW5hcGhQXzQwNTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzQwNTksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF80MDU5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF80MDU5XzIwMTksIFRQWV8yMDE5XzQwNTksIG5yb3coZGZfMjAxOV80MDU5KSkNCmlyb19hbmFwaE5fNDA1OV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNDA1OV8yMDE5LCBUUFlfMjAxOV80MDU5LCBucm93KGRmXzIwMTlfNDA1OSkpDQppcm9fZ2JzXzQwNTlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzQwNTlfMjAxOSwgVFBZXzIwMTlfNDA1OSwgbnJvdyhkZl8yMDE5XzQwNTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzYwNzkgPC0gc3Vic2V0KGRmXzIwMTlfNjA3OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kNjA3OQ0KVFBZXzIwMTlfNjA3OSA8LSBzdW0oZGZfMjAxOV82MDc5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNjA3OSBpbiAyMDE5DQpUTkVfYW5hcGhQXzYwNzlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzYwNzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fNjA3OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNjA3OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfNjA3OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNjA3OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF82MDc5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF82MDc5XzIwMTksIFRQWV8yMDE5XzYwNzksIG5yb3coZGZfMjAxOV82MDc5KSkNCmlyb19hbmFwaE5fNjA3OV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNjA3OV8yMDE5LCBUUFlfMjAxOV82MDc5LCBucm93KGRmXzIwMTlfNjA3OSkpDQppcm9fZ2JzXzYwNzlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzYwNzlfMjAxOSwgVFBZXzIwMTlfNjA3OSwgbnJvdyhkZl8yMDE5XzYwNzkpKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmRmXzIwMjBfMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMjAsICdbMCwxOV0nKQ0KZGZfMjAyMF8yMDM5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1syMCwzOV0nKQ0KZGZfMjAyMF80MDU5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1s0MCw1OV0nKQ0KZGZfMjAyMF82MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1s2MCw3OV0nKQ0KYGBgDQoNCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfMDAxOSA8LSBzdWJzZXQoZGZfMjAyMF8wMDE5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQwMDE5DQpUUFlfMjAyMF8wMDE5IDwtIHN1bShkZl8yMDIwXzAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAwMDE5IGluIDIwMjANClRORV9hbmFwaFBfMDAxOV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8wMDE5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8wMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18wMDE5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8wMDE5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzAwMTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzAwMTlfMjAyMCwgVFBZXzIwMjBfMDAxOSwgbnJvdyhkZl8yMDIwXzAwMTkpKQ0KaXJvX2FuYXBoTl8wMDE5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8wMDE5XzIwMjAsIFRQWV8yMDIwXzAwMTksIG5yb3coZGZfMjAyMF8wMDE5KSkNCmlyb19nYnNfMDAxOV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfMDAxOV8yMDIwLCBUUFlfMjAyMF8wMDE5LCBucm93KGRmXzIwMjBfMDAxOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfMjAzOSA8LSBzdWJzZXQoZGZfMjAyMF8yMDM5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQyMDM5DQpUUFlfMjAyMF8yMDM5IDwtIHN1bShkZl8yMDIwXzIwMzkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAyMDM5IGluIDIwMjANClRORV9hbmFwaFBfMjAzOV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfMjAzOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8yMDM5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18yMDM5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8yMDM5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzIwMzlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMzlfMjAyMCwgVFBZXzIwMjBfMjAzOSwgbnJvdyhkZl8yMDIwXzIwMzkpKQ0KaXJvX2FuYXBoTl8yMDM5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDM5XzIwMjAsIFRQWV8yMDIwXzIwMzksIG5yb3coZGZfMjAyMF8yMDM5KSkNCmlyb19nYnNfMjAzOV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfMjAzOV8yMDIwLCBUUFlfMjAyMF8yMDM5LCBucm93KGRmXzIwMjBfMjAzOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfNDA1OSA8LSBzdWJzZXQoZGZfMjAyMF80MDU5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQ0MDU5DQpUUFlfMjAyMF80MDU5IDwtIHN1bShkZl8yMDIwXzQwNTkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMjANClRORV9hbmFwaFBfNDA1OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl80MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic180MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzQwNTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAyMCwgVFBZXzIwMjBfNDA1OSwgbnJvdyhkZl8yMDIwXzQwNTkpKQ0KaXJvX2FuYXBoTl80MDU5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl80MDU5XzIwMjAsIFRQWV8yMDIwXzQwNTksIG5yb3coZGZfMjAyMF80MDU5KSkNCmlyb19nYnNfNDA1OV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfNDA1OV8yMDIwLCBUUFlfMjAyMF80MDU5LCBucm93KGRmXzIwMjBfNDA1OSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfNjA3OSA8LSBzdWJzZXQoZGZfMjAyMF82MDc5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQ2MDc5DQpUUFlfMjAyMF82MDc5IDwtIHN1bShkZl8yMDIwXzYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA2MDc5IGluIDIwMjANClRORV9hbmFwaFBfNjA3OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl82MDc5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF82MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic182MDc5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF82MDc5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzYwNzlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzYwNzlfMjAyMCwgVFBZXzIwMjBfNjA3OSwgbnJvdyhkZl8yMDIwXzYwNzkpKQ0KaXJvX2FuYXBoTl82MDc5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl82MDc5XzIwMjAsIFRQWV8yMDIwXzYwNzksIG5yb3coZGZfMjAyMF82MDc5KSkNCmlyb19nYnNfNjA3OV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfNjA3OV8yMDIwLCBUUFlfMjAyMF82MDc5LCBucm93KGRmXzIwMjBfNjA3OSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KRGlhZzEgPC0gcmVwKCdBbmFwaHlsYXhpcyBuYXJyb3cnLCB0aW1lcz0yNSkNCkRpYWcyIDwtIHJlcCgnQW5hcGh5bGF4aXMgcG9zc2libGUnLCB0aW1lcz0yNSkNCkRpYWczIDwtIHJlcCgnZ2JzIG5hcnJvdycsIHRpbWVzPTI1KQ0KYWxsX2RpYWcgPC0gYyhEaWFnMSwgRGlhZzIsIERpYWczKQ0KDQphbGxfeWVhcnMgPC0gcmVwKGMoJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnKSwgdGltZXM9MTUpDQoNCnJlcF90b3RhbCA8LSByZXAoJ1RvdGFsJywgdGltZXM9NSkNCnJlcF8wMDE5IDwtIHJlcCgnMC0xOScsIHRpbWVzPTUpDQpyZXBfMjAzOSA8LSByZXAoJzIwLTM5JywgdGltZXM9NSkNCnJlcF80MDU5IDwtIHJlcCgnNDAtNTknLCB0aW1lcz01KQ0KcmVwXzYwNzkgPC0gcmVwKCc2MC03OScsIHRpbWVzPTUpDQoNCmFsbF9hZ2VzIDwtIHJlcChjKHJlcF90b3RhbCwgcmVwXzAwMTksIHJlcF8yMDM5LCByZXBfNDA1OSwgcmVwXzYwNzkpLCB0aW1lcz0zKQ0KDQoNCg0KY291bnRfZXZlbnRzIDwtIGMoDQogIFRORV9hbmFwaE4sIFRORV9hbmFwaE5fMjAxNywgVE5FX2FuYXBoTl8yMDE4LCANCiAgVE5FX2FuYXBoTl8yMDE5LCBUTkVfYW5hcGhOXzIwMjAsIA0KICBUTkVfYW5hcGhOMDAxOSwgVE5FX2FuYXBoTl8wMDE5XzIwMTcsIFRORV9hbmFwaE5fMDAxOV8yMDE4LA0KICBUTkVfYW5hcGhOXzAwMTlfMjAxOSwgVE5FX2FuYXBoTl8wMDE5XzIwMjAsIA0KICBUTkVfYW5hcGhOMjAzOSwgVE5FX2FuYXBoTl8yMDM5XzIwMTcsIFRORV9hbmFwaE5fMjAzOV8yMDE4LA0KICBUTkVfYW5hcGhOXzIwMzlfMjAxOSwgVE5FX2FuYXBoTl8yMDM5XzIwMjAsDQogIFRORV9hbmFwaE40MDU5LCBUTkVfYW5hcGhOXzQwNTlfMjAxNywgVE5FX2FuYXBoTl80MDU5XzIwMTgsDQogIFRORV9hbmFwaE5fNDA1OV8yMDE5LCBUTkVfYW5hcGhOXzQwNTlfMjAyMCwNCiAgVE5FX2FuYXBoTjYwNzksIFRORV9hbmFwaE5fNjA3OV8yMDE3LCBUTkVfYW5hcGhOXzYwNzlfMjAxOCwNCiAgVE5FX2FuYXBoTl82MDc5XzIwMTksIFRORV9hbmFwaE5fNjA3OV8yMDIwLA0KICAjIyMjIEFuYXBoIFBvc3NpYmxlIA0KICBUTkVfYW5hcGhQLCBUTkVfYW5hcGhQXzIwMTcsIFRORV9hbmFwaFBfMjAxOCwgDQogIFRORV9hbmFwaFBfMjAxOSwgVE5FX2FuYXBoUF8yMDIwLCANCiAgVE5FX2FuYXBoUDAwMTksIFRORV9hbmFwaFBfMDAxOV8yMDE3LCBUTkVfYW5hcGhQXzAwMTlfMjAxOCwNCiAgVE5FX2FuYXBoUF8wMDE5XzIwMTksIFRORV9hbmFwaFBfMDAxOV8yMDIwLCANCiAgVE5FX2FuYXBoUDIwMzksIFRORV9hbmFwaFBfMjAzOV8yMDE3LCBUTkVfYW5hcGhQXzIwMzlfMjAxOCwNCiAgVE5FX2FuYXBoUF8yMDM5XzIwMTksIFRORV9hbmFwaFBfMjAzOV8yMDIwLA0KICBUTkVfYW5hcGhQNDA1OSwgVE5FX2FuYXBoUF80MDU5XzIwMTcsIFRORV9hbmFwaFBfNDA1OV8yMDE4LA0KICBUTkVfYW5hcGhQXzQwNTlfMjAxOSwgVE5FX2FuYXBoUF80MDU5XzIwMjAsDQogIFRORV9hbmFwaFA2MDc5LCBUTkVfYW5hcGhQXzYwNzlfMjAxNywgVE5FX2FuYXBoUF82MDc5XzIwMTgsDQogIFRORV9hbmFwaFBfNjA3OV8yMDE5LCBUTkVfYW5hcGhQXzYwNzlfMjAyMCwNCiAgIyMjIyBHQlMgDQogIFRORV9nYnMsIFRORV9nYnNfMjAxNywgVE5FX2dic18yMDE4LCANCiAgVE5FX2dic18yMDE5LCBUTkVfZ2JzXzIwMjAsIA0KICBUTkVfZ2JzMDAxOSwgVE5FX2dic18wMDE5XzIwMTcsIFRORV9nYnNfMDAxOV8yMDE4LA0KICBUTkVfZ2JzXzAwMTlfMjAxOSwgVE5FX2dic18wMDE5XzIwMjAsIA0KICBUTkVfZ2JzMjAzOSwgVE5FX2dic18yMDM5XzIwMTcsIFRORV9nYnNfMjAzOV8yMDE4LA0KICBUTkVfZ2JzXzIwMzlfMjAxOSwgVE5FX2dic18yMDM5XzIwMjAsDQogIFRORV9nYnM0MDU5LCBUTkVfZ2JzXzQwNTlfMjAxNywgVE5FX2dic180MDU5XzIwMTgsDQogIFRORV9nYnNfNDA1OV8yMDE5LCBUTkVfZ2JzXzQwNTlfMjAyMCwNCiAgVE5FX2diczYwNzksIFRORV9nYnNfNjA3OV8yMDE3LCBUTkVfZ2JzXzYwNzlfMjAxOCwNCiAgVE5FX2dic182MDc5XzIwMTksIFRORV9nYnNfNjA3OV8yMDIwDQogICkNCg0KDQpQZXJzWWVhciA8LSBjKFRQWSwgVFBZXzIwMTcsIFRQWV8yMDE4LCANCiAgVFBZXzIwMTksIFRQWV8yMDIwLCANCiAgVFBZMDAxOSwgVFBZXzIwMTdfMDAxOSwgVFBZXzIwMThfMDAxOSwNCiAgVFBZXzIwMTlfMDAxOSwgVFBZXzIwMjBfMDAxOSwgDQogIFRQWTIwMzksIFRQWV8yMDE3XzIwMzksIFRQWV8yMDE4XzIwMzksDQogIFRQWV8yMDE5XzIwMzksIFRQWV8yMDIwXzIwMzksDQogIFRQWTQwNTksIFRQWV8yMDE3XzQwNTksIFRQWV8yMDE4XzQwNTksDQogIFRQWV8yMDE5XzQwNTksIFRQWV8yMDIwXzQwNTksDQogIFRQWTYwNzksIFRQWV8yMDE3XzQwNTksIFRQWV8yMDE4XzQwNTksDQogIFRQWV8yMDE5XzQwNTksIFRQWV8yMDIwXzQwNTkpDQoNCg0KcGVyc195ZWFyX2FsbCA8LSByZXAoUGVyc1llYXIsIHRpbWVzPTMpDQoNCmBgYA0KDQpgYGB7cn0NCklSXzEwMDBQWSA8LSAgYXMubnVtZXJpYyhjKA0KICBpcm9fYW5hcGhOWzFdLCBpcm9fYW5hcGhOXzIwMTdbMV0sIGlyb19hbmFwaE5fMjAxOFsxXSwgDQogIGlyb19hbmFwaE5fMjAxOVsxXSwgaXJvX2FuYXBoTl8yMDIwWzFdLCANCiAgaXJvX2FuYXBoTjAwMTlbMV0sIGlyb19hbmFwaE5fMDAxOV8yMDE3WzFdLCBpcm9fYW5hcGhOXzAwMTlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoTl8wMDE5XzIwMTlbMV0sIGlyb19hbmFwaE5fMDAxOV8yMDIwWzFdLCANCiAgaXJvX2FuYXBoTjIwMzlbMV0sIGlyb19hbmFwaE5fMjAzOV8yMDE3WzFdLCBpcm9fYW5hcGhOXzIwMzlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoTl8yMDM5XzIwMTlbMV0sIGlyb19hbmFwaE5fMjAzOV8yMDIwWzFdLA0KICBpcm9fYW5hcGhONDA1OVsxXSwgaXJvX2FuYXBoTl80MDU5XzIwMTdbMV0sIGlyb19hbmFwaE5fNDA1OV8yMDE4WzFdLA0KICBpcm9fYW5hcGhOXzQwNTlfMjAxOVsxXSwgaXJvX2FuYXBoTl80MDU5XzIwMjBbMV0sDQogIGlyb19hbmFwaE42MDc5WzFdLCBpcm9fYW5hcGhOXzYwNzlfMjAxN1sxXSwgaXJvX2FuYXBoTl82MDc5XzIwMThbMV0sDQogIGlyb19hbmFwaE5fNjA3OV8yMDE5WzFdLCBpcm9fYW5hcGhOXzYwNzlfMjAyMFsxXSwNCiAgIyMjIyBBbmFwaCBQb3NzaWJsZSANCiAgaXJvX2FuYXBoUFsxXSwgaXJvX2FuYXBoUF8yMDE3WzFdLCBpcm9fYW5hcGhQXzIwMThbMV0sIA0KICBpcm9fYW5hcGhQXzIwMTlbMV0sIGlyb19hbmFwaFBfMjAyMFsxXSwgDQogIGlyb19hbmFwaFAwMDE5WzFdLCBpcm9fYW5hcGhQXzAwMTlfMjAxN1sxXSwgaXJvX2FuYXBoUF8wMDE5XzIwMThbMV0sDQogIGlyb19hbmFwaFBfMDAxOV8yMDE5WzFdLCBpcm9fYW5hcGhQXzAwMTlfMjAyMFsxXSwgDQogIGlyb19hbmFwaFAyMDM5WzFdLCBpcm9fYW5hcGhQXzIwMzlfMjAxN1sxXSwgaXJvX2FuYXBoUF8yMDM5XzIwMThbMV0sDQogIGlyb19hbmFwaFBfMjAzOV8yMDE5WzFdLCBpcm9fYW5hcGhQXzIwMzlfMjAyMFsxXSwNCiAgaXJvX2FuYXBoUDQwNTlbMV0sIGlyb19hbmFwaFBfNDA1OV8yMDE3WzFdLCBpcm9fYW5hcGhQXzQwNTlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoUF80MDU5XzIwMTlbMV0sIGlyb19hbmFwaFBfNDA1OV8yMDIwWzFdLA0KICBpcm9fYW5hcGhQNjA3OVsxXSwgaXJvX2FuYXBoUF82MDc5XzIwMTdbMV0sIGlyb19hbmFwaFBfNjA3OV8yMDE4WzFdLA0KICBpcm9fYW5hcGhQXzYwNzlfMjAxOVsxXSwgaXJvX2FuYXBoUF82MDc5XzIwMjBbMV0sDQogICMjIyMgR0JTIA0KICAgIGlyb19nYnNbMV0sIGlyb19nYnNfMjAxN1sxXSwgaXJvX2dic18yMDE4WzFdLCANCiAgaXJvX2dic18yMDE5WzFdLCBpcm9fZ2JzXzIwMjBbMV0sIA0KICBpcm9fZ2JzMDAxOVsxXSwgaXJvX2dic18wMDE5XzIwMTdbMV0sIGlyb19nYnNfMDAxOV8yMDE4WzFdLA0KICBpcm9fZ2JzXzAwMTlfMjAxOVsxXSwgaXJvX2dic18wMDE5XzIwMjBbMV0sIA0KICBpcm9fZ2JzMjAzOVsxXSwgaXJvX2dic18yMDM5XzIwMTdbMV0sIGlyb19nYnNfMjAzOV8yMDE4WzFdLA0KICBpcm9fZ2JzXzIwMzlfMjAxOVsxXSwgaXJvX2dic18yMDM5XzIwMjBbMV0sDQogIGlyb19nYnM0MDU5WzFdLCBpcm9fZ2JzXzQwNTlfMjAxN1sxXSwgaXJvX2dic180MDU5XzIwMThbMV0sDQogIGlyb19nYnNfNDA1OV8yMDE5WzFdLCBpcm9fZ2JzXzQwNTlfMjAyMFsxXSwNCiAgaXJvX2diczYwNzlbMV0sIGlyb19nYnNfNjA3OV8yMDE3WzFdLCBpcm9fZ2JzXzYwNzlfMjAxOFsxXSwNCiAgaXJvX2dic182MDc5XzIwMTlbMV0sIGlyb19nYnNfNjA3OV8yMDIwWzFdDQogICkpDQpgYGANCg0KYGBge3J9DQpJUl8xMDAwUFlfOTVMIDwtIGFzLm51bWVyaWMoYygNCiAgaXJvX2FuYXBoTlsyXSwgaXJvX2FuYXBoTl8yMDE3WzJdLCBpcm9fYW5hcGhOXzIwMThbMl0sIA0KICBpcm9fYW5hcGhOXzIwMTlbMl0sIGlyb19hbmFwaE5fMjAyMFsyXSwgDQogIGlyb19hbmFwaE4wMDE5WzJdLCBpcm9fYW5hcGhOXzAwMTlfMjAxN1syXSwgaXJvX2FuYXBoTl8wMDE5XzIwMThbMl0sDQogIGlyb19hbmFwaE5fMDAxOV8yMDE5WzJdLCBpcm9fYW5hcGhOXzAwMTlfMjAyMFsyXSwgDQogIGlyb19hbmFwaE4yMDM5WzJdLCBpcm9fYW5hcGhOXzIwMzlfMjAxN1syXSwgaXJvX2FuYXBoTl8yMDM5XzIwMThbMl0sDQogIGlyb19hbmFwaE5fMjAzOV8yMDE5WzJdLCBpcm9fYW5hcGhOXzIwMzlfMjAyMFsyXSwNCiAgaXJvX2FuYXBoTjQwNTlbMl0sIGlyb19hbmFwaE5fNDA1OV8yMDE3WzJdLCBpcm9fYW5hcGhOXzQwNTlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoTl80MDU5XzIwMTlbMl0sIGlyb19hbmFwaE5fNDA1OV8yMDIwWzJdLA0KICBpcm9fYW5hcGhONjA3OVsyXSwgaXJvX2FuYXBoTl82MDc5XzIwMTdbMl0sIGlyb19hbmFwaE5fNjA3OV8yMDE4WzJdLA0KICBpcm9fYW5hcGhOXzYwNzlfMjAxOVsyXSwgaXJvX2FuYXBoTl82MDc5XzIwMjBbMl0sDQogICMjIyMgQW5hcGggUG9zc2libGUgDQogIGlyb19hbmFwaFBbMl0sIGlyb19hbmFwaFBfMjAxN1syXSwgaXJvX2FuYXBoUF8yMDE4WzJdLCANCiAgaXJvX2FuYXBoUF8yMDE5WzJdLCBpcm9fYW5hcGhQXzIwMjBbMl0sIA0KICBpcm9fYW5hcGhQMDAxOVsyXSwgaXJvX2FuYXBoUF8wMDE5XzIwMTdbMl0sIGlyb19hbmFwaFBfMDAxOV8yMDE4WzJdLA0KICBpcm9fYW5hcGhQXzAwMTlfMjAxOVsyXSwgaXJvX2FuYXBoUF8wMDE5XzIwMjBbMl0sIA0KICBpcm9fYW5hcGhQMjAzOVsyXSwgaXJvX2FuYXBoUF8yMDM5XzIwMTdbMl0sIGlyb19hbmFwaFBfMjAzOV8yMDE4WzJdLA0KICBpcm9fYW5hcGhQXzIwMzlfMjAxOVsyXSwgaXJvX2FuYXBoUF8yMDM5XzIwMjBbMl0sDQogIGlyb19hbmFwaFA0MDU5WzJdLCBpcm9fYW5hcGhQXzQwNTlfMjAxN1syXSwgaXJvX2FuYXBoUF80MDU5XzIwMThbMl0sDQogIGlyb19hbmFwaFBfNDA1OV8yMDE5WzJdLCBpcm9fYW5hcGhQXzQwNTlfMjAyMFsyXSwNCiAgaXJvX2FuYXBoUDYwNzlbMl0sIGlyb19hbmFwaFBfNjA3OV8yMDE3WzJdLCBpcm9fYW5hcGhQXzYwNzlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoUF82MDc5XzIwMTlbMl0sIGlyb19hbmFwaFBfNjA3OV8yMDIwWzJdLA0KICAjIyMjIEdCUyANCiAgICBpcm9fZ2JzWzJdLCBpcm9fZ2JzXzIwMTdbMl0sIGlyb19nYnNfMjAxOFsyXSwgDQogIGlyb19nYnNfMjAxOVsyXSwgaXJvX2dic18yMDIwWzJdLCANCiAgaXJvX2diczAwMTlbMl0sIGlyb19nYnNfMDAxOV8yMDE3WzJdLCBpcm9fZ2JzXzAwMTlfMjAxOFsyXSwNCiAgaXJvX2dic18wMDE5XzIwMTlbMl0sIGlyb19nYnNfMDAxOV8yMDIwWzJdLCANCiAgaXJvX2diczIwMzlbMl0sIGlyb19nYnNfMjAzOV8yMDE3WzJdLCBpcm9fZ2JzXzIwMzlfMjAxOFsyXSwNCiAgaXJvX2dic18yMDM5XzIwMTlbMl0sIGlyb19nYnNfMjAzOV8yMDIwWzJdLA0KICBpcm9fZ2JzNDA1OVsyXSwgaXJvX2dic180MDU5XzIwMTdbMl0sIGlyb19nYnNfNDA1OV8yMDE4WzJdLA0KICBpcm9fZ2JzXzQwNTlfMjAxOVsyXSwgaXJvX2dic180MDU5XzIwMjBbMl0sDQogIGlyb19nYnM2MDc5WzJdLCBpcm9fZ2JzXzYwNzlfMjAxN1syXSwgaXJvX2dic182MDc5XzIwMThbMl0sDQogIGlyb19nYnNfNjA3OV8yMDE5WzJdLCBpcm9fZ2JzXzYwNzlfMjAyMFsyXQ0KICApKQ0KYGBgDQoNCg0KYGBge3J9DQpJUl8xMDAwUFlfOTVIIDwtIGFzLm51bWVyaWMoYygNCiAgaXJvX2FuYXBoTlszXSwgaXJvX2FuYXBoTl8yMDE3WzNdLCBpcm9fYW5hcGhOXzIwMThbM10sIA0KICBpcm9fYW5hcGhOXzIwMTlbM10sIGlyb19hbmFwaE5fMjAyMFszXSwgDQogIGlyb19hbmFwaE4wMDE5WzNdLCBpcm9fYW5hcGhOXzAwMTlfMjAxN1szXSwgaXJvX2FuYXBoTl8wMDE5XzIwMThbM10sDQogIGlyb19hbmFwaE5fMDAxOV8yMDE5WzNdLCBpcm9fYW5hcGhOXzAwMTlfMjAyMFszXSwgDQogIGlyb19hbmFwaE4yMDM5WzNdLCBpcm9fYW5hcGhOXzIwMzlfMjAxN1szXSwgaXJvX2FuYXBoTl8yMDM5XzIwMThbM10sDQogIGlyb19hbmFwaE5fMjAzOV8yMDE5WzNdLCBpcm9fYW5hcGhOXzIwMzlfMjAyMFszXSwNCiAgaXJvX2FuYXBoTjQwNTlbM10sIGlyb19hbmFwaE5fNDA1OV8yMDE3WzNdLCBpcm9fYW5hcGhOXzQwNTlfMjAxOFszXSwNCiAgaXJvX2FuYXBoTl80MDU5XzIwMTlbM10sIGlyb19hbmFwaE5fNDA1OV8yMDIwWzNdLA0KICBpcm9fYW5hcGhONjA3OVszXSwgaXJvX2FuYXBoTl82MDc5XzIwMTdbM10sIGlyb19hbmFwaE5fNjA3OV8yMDE4WzNdLA0KICBpcm9fYW5hcGhOXzYwNzlfMjAxOVszXSwgaXJvX2FuYXBoTl82MDc5XzIwMjBbM10sDQogICMjIyMgQW5hcGggUG9zc2libGUgDQogIGlyb19hbmFwaFBbM10sIGlyb19hbmFwaFBfMjAxN1szXSwgaXJvX2FuYXBoUF8yMDE4WzNdLCANCiAgaXJvX2FuYXBoUF8yMDE5WzNdLCBpcm9fYW5hcGhQXzIwMjBbM10sIA0KICBpcm9fYW5hcGhQMDAxOVszXSwgaXJvX2FuYXBoUF8wMDE5XzIwMTdbM10sIGlyb19hbmFwaFBfMDAxOV8yMDE4WzNdLA0KICBpcm9fYW5hcGhQXzAwMTlfMjAxOVszXSwgaXJvX2FuYXBoUF8wMDE5XzIwMjBbM10sIA0KICBpcm9fYW5hcGhQMjAzOVszXSwgaXJvX2FuYXBoUF8yMDM5XzIwMTdbM10sIGlyb19hbmFwaFBfMjAzOV8yMDE4WzNdLA0KICBpcm9fYW5hcGhQXzIwMzlfMjAxOVszXSwgaXJvX2FuYXBoUF8yMDM5XzIwMjBbM10sDQogIGlyb19hbmFwaFA0MDU5WzNdLCBpcm9fYW5hcGhQXzQwNTlfMjAxN1szXSwgaXJvX2FuYXBoUF80MDU5XzIwMThbM10sDQogIGlyb19hbmFwaFBfNDA1OV8yMDE5WzNdLCBpcm9fYW5hcGhQXzQwNTlfMjAyMFszXSwNCiAgaXJvX2FuYXBoUDYwNzlbM10sIGlyb19hbmFwaFBfNjA3OV8yMDE3WzNdLCBpcm9fYW5hcGhQXzYwNzlfMjAxOFszXSwNCiAgaXJvX2FuYXBoUF82MDc5XzIwMTlbM10sIGlyb19hbmFwaFBfNjA3OV8yMDIwWzNdLA0KICAjIyMjIEdCUyANCiAgICBpcm9fZ2JzWzNdLCBpcm9fZ2JzXzIwMTdbM10sIGlyb19nYnNfMjAxOFszXSwgDQogIGlyb19nYnNfMjAxOVszXSwgaXJvX2dic18yMDIwWzNdLCANCiAgaXJvX2diczAwMTlbM10sIGlyb19nYnNfMDAxOV8yMDE3WzNdLCBpcm9fZ2JzXzAwMTlfMjAxOFszXSwNCiAgaXJvX2dic18wMDE5XzIwMTlbM10sIGlyb19nYnNfMDAxOV8yMDIwWzNdLCANCiAgaXJvX2diczIwMzlbM10sIGlyb19nYnNfMjAzOV8yMDE3WzNdLCBpcm9fZ2JzXzIwMzlfMjAxOFszXSwNCiAgaXJvX2dic18yMDM5XzIwMTlbM10sIGlyb19nYnNfMjAzOV8yMDIwWzNdLA0KICBpcm9fZ2JzNDA1OVszXSwgaXJvX2dic180MDU5XzIwMTdbM10sIGlyb19nYnNfNDA1OV8yMDE4WzNdLA0KICBpcm9fZ2JzXzQwNTlfMjAxOVszXSwgaXJvX2dic180MDU5XzIwMjBbM10sDQogIGlyb19nYnM2MDc5WzNdLCBpcm9fZ2JzXzYwNzlfMjAxN1szXSwgaXJvX2dic182MDc5XzIwMThbM10sDQogIGlyb19nYnNfNjA3OV8yMDE5WzNdLCBpcm9fZ2JzXzYwNzlfMjAyMFszXQ0KICApKQ0KYGBgDQoNCmBgYHtyfQ0KQmlnX3RhYmxlIDwtIGRhdGEudGFibGUoRGlhZ25vc2lzID0gYWxsX2RpYWcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgQWdlX0JhbmRzID0gYWxsX2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICBZZWFyID0gYWxsX3llYXJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQgPSBjb3VudF9ldmVudHMsDQogICAgICAgICAgICAgICAgICAgICAgICBQZXJzb25fWWVhcnMgPSByb3VuZChwZXJzX3llYXJfYWxsLCAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIElSXzEwMDBfUFkgPSBJUl8xMDAwUFksIA0KICAgICAgICAgICAgICAgICAgICAgICAgSVJfMTAwMF9QWV85NUwgPSBJUl8xMDAwUFlfOTVMLA0KICAgICAgICAgICAgICAgICAgICAgICAgSVJfMTAwMFBZXzk1SCA9IElSXzEwMDBQWV85NUgpDQpgYGANCg0KDQojIyMgRm9yZXN0IFBsb3RzIHstLnRhYnNldH0gDQoNCiMjIyMgVG90YWwgIHstI3RvdH0NCg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KDQpkZiA8LSBCaWdfdGFibGUgDQoNCg0KDQpkZl90b3RhbCA8LSBkZiAlPiUgIA0KICBmaWx0ZXIoWWVhcj09J1RvdGFsJykNCg0KZGZfdG90YWwkeV9vcmRlciA8LSBmYWN0b3IocGFzdGUoZGZfdG90YWwkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKCBkZl90b3RhbCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfdG90YWwsIGFlcyh4ID0gSVJfMTAwMF9QWSwgeSA9IHlfb3JkZXIsIHNpemU9UGVyc29uX1llYXJzKSkgKw0KICBnZW9tX3BvaW50KHNoYXBlPTE1KSArDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gSVJfMTAwMF9QWV85NUwsIHhtYXggPSBJUl8xMDAwUFlfOTVIKSwgc2l6ZSA9IDAuNSkgKw0KICBmYWNldF9ncmlkKERpYWdub3NpcyB+IC4sIHNjYWxlcyA9ICJmcmVlX3kiLCBzcGFjZSA9ICJmcmVlX3kiKSArDQogIHRoZW1lX2J3KCkgKw0KICBsYWJzKHRpdGxlID0gIkZvcmVzdCBQbG90IG9mIEluY2lkZW5jZSBSYXRlcyIsDQogICAgICAgeCA9ICJJbmNpZGVuY2UgUmF0ZSBwZXIgMTAwMCBQZXJzb24tWWVhcnMiLA0KICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsDQogICAgICAgc3VidGl0bGUgPSAiRGF0YSBmcm9tIDIwMTcgdG8gMjAyMCIpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGltaXRzPWMoMCwyNTAwKSwgYnJlYWtzID0gc2VxKDAsMjUwMCwgYnk9NTAwKSkNCmBgYA0KDQojIyMjIDIwMTcgey0jMjAxN30NCg0KDQpgYGB7cn0NCg0KZGZfMjAxN19QIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nMjAxNycpDQoNCmRmXzIwMTdfUCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl8yMDE3X1AkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKGRmXzIwMTdfUCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfMjAxN19QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE3IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGltaXRzPWMoMCwyNTAwKSwgYnJlYWtzID0gc2VxKDAsMjUwMCwgYnk9NTAwKSkNCmBgYA0KDQoNCiMjIyMgMjAxOCB7LSMyMDE4fQ0KDQpgYGB7cn0NCg0KZGZfMjAxOF9QIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nMjAxOCcpDQoNCmRmXzIwMThfUCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl8yMDE4X1AkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKGRmXzIwMThfUCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfMjAxOF9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplID0gUGVyc29uX1llYXJzKSkgKw0KICBnZW9tX3BvaW50KHNoYXBlPTE1KSArDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gSVJfMTAwMF9QWV85NUwsIHhtYXggPSBJUl8xMDAwUFlfOTVIKSwgc2l6ZSA9IDAuNSkgKw0KICBmYWNldF9ncmlkKERpYWdub3NpcyB+IC4sIHNjYWxlcyA9ICJmcmVlX3kiLCBzcGFjZSA9ICJmcmVlX3kiKSArDQogIHRoZW1lX2J3KCkgKw0KICBsYWJzKHRpdGxlID0gIkZvcmVzdCBQbG90IG9mIEluY2lkZW5jZSBSYXRlcyIsDQogICAgICAgeCA9ICJJbmNpZGVuY2UgUmF0ZSBwZXIgMTAwMCBQZXJzb24tWWVhcnMiLA0KICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsDQogICAgICAgc3VidGl0bGUgPSAiRGF0YSBmcm9tIDIwMTgiKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCiANCiMjIyMgMjAxOSB7LSMyMDE5fQ0KDQpgYGB7cn0NCg0KZGZfMjAxOV9QIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nMjAxOScpDQoNCmRmXzIwMTlfUCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl8yMDE5X1AkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKGRmXzIwMTlfUCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfMjAxOV9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE5IikrDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCiMjIyMgMjAyMCB7LSMyMDIwfQ0KDQpgYGB7cn0NCg0KZGZfMjAyMF9QIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nMjAyMCcpDQoNCmRmXzIwMjBfUCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl8yMDIwX1AkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKGRmXzIwMjBfUCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfMjAyMF9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDIwIikrDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArIA0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGltaXRzPWMoMCwyNTAwKSwgYnJlYWtzID0gc2VxKDAsMjUwMCwgYnk9NTAwKSkNCmBgYA0KDQoNCg0KIyMgTGVzc29ucyBsZWFybmVkIHstI2xlc3N9DQoNCg0KIyBBbm5leGVzICB7LS50YWJzZXR9DQoNCiMjIEFubmV4IDEgUmVzdWx0cyBUYWJsZSB7LSNUYWJsZXN9DQoNCmBgYHtyIHRhYjIsIHJlc3VsdHMgPSAnaG9sZCd9DQpkYXRhdGFibGUoQmlnX3RhYmxlLCANCiAgICAgICAgICBjYXB0aW9uPSdJbmNpZGVuY2UgUmF0ZXMgd2l0aCA5NSUgQ0knLA0KICAgICAgICAgIGNsYXNzPSdjZWxsLWJvcmRlciBzdHJpcGUnLCANCiAgICAgICAgICByb3duYW1lcz1GLCANCiAgICAgICAgICBjb2xuYW1lcz1jKCdEaWFnbm9zaXMnLCAnQWdlIEJhbmRzJywgJ1llYXInLCAnQW1vdW50IG9mIEV2ZW50cycsIA0KICAgICAgICAgICAgICAgICAgICAgJ1BlcnNvbiBZZWFycycsICdJUiAxMDAwIFBlcnNvbiBZZWFycycsICdJUiAxMDAwIFBlcnNvbiBZZWFycyAgOTUlIENJIExvd2VyJywgJ0lSIDEwMDAgUGVyc29uIFllYXJzIDk1JSBDSSBIaWdoZXInKSwNCiAgICAgICAgICBleHRlbnNpb25zPSdCdXR0b25zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJywgYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJywgJ3BkZicsICdwcmludCcpDQogICAgICAgICAgKSkNCmBgYA0KDQoNCg0KDQojIyBBbm5leCAyIERheSA2IHstI2RheTZ9DQoNCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoPScxMDAlJyxvdXQuaGVpZ2h0PSA1MDAwLHJlc3VsdHM9J2FzaXMnfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoImRheTYucGRmIikNCmBgYA0KDQoNCg0K